package com.zsj._class;

/**
 * @author zsj
 * @version 1.0
 * @date 2024/5/21 20:44
 * @description
 */
public class InitClassDemo {
    /*
    jvm加载这个类的过程
    验证阶段
        文件格式验证
        元数据验证
        字节码认证
        符号引用认证
    准备阶段
        为变量分配内存，设置变量初始值
        需注意:如果一个变量被final修饰 那么将会显示进行初始化(也就是直接分配他的值)
        不会为实例变量进行初始化,类变量会分配在方法区中,而实例变量会随着对象一起分配到java堆中
    解析阶段:
        1.将常量池中的符号引用替换成直接引用(符号引用是一组符号来描述所引用的目标,符号引用的字面量习惯是明确定义在java虚拟机的class文件格式中
        直接引用就是指向目标的指针,相对偏移量或一个间接定位到目标的句柄)
        2.实际上,解析操作往往会伴随着JVM在执行完初始化之后在执行
     */
    private static int a = 1;

    static {
        a = 2;
        n = 20;
    }

    private static int n = 10;

    public static void main(String[] args) {
        System.out.println(a);
        System.out.println(n);
    }

}
